CSS 레이 아웃

=> CSS를 제대로 사용 하기 위하여 알아야 할것

  • CSS 개념 과 소개
  • CSS 레이아웃 기초

1. CSS 개념 과 소개

=> CSS를 설명 하기에 앞서 HTML이 무엇을 의미하는지 정확히 파악해야 한다.

  • HTML은 MarkUpLanguage 다.
  • HTML은 컨텐츠의 내용과 구조를 표시한다.(<img>, <ul>, <p>, <div>등의 엘리먼트 를 이용)
  • CSS는 어떻게 표현해 내는지에 대한 것을 담당 한다.(<table>, <tr>, <td> 를 자제)
  • CSS의 목적은 문서의 내용과(HTML 본래의 의미, 구조) 문서의 표현(디자인)을 분리 하는데 있다.
  • CSS는 HTML, XML, XHTML 에 style(글자,여백,레이아웃)을 적용하기 위한 언어
CSS선언


p.text,
div.search,
span.name {
      color:  #3333;
}



h1 {
      font-weight: bold ;
      font-size: 3em;
      margin: 1.5em 0 1em;
      padding: 0 0 0 8px   
} 


  • CSS의 rule(선언)은 selector(선택자)와 선언부로 이루어 졌다
  • selector는 ',' 를 이용하여 구분할수 있다.
  • css의 여러가지 선언 방법


<!-- 1. 외부 선언(extenal css)-->
<!-- 우선순위가 가장 낮다 -->
<link rel="stylesheet" type="text/css" href="myCss.css" />

<!-- 2. 엘리먼트에 직접 선어 -->
<div style="padding: 10px; border: 1px solid #eee;">
  <p>contents</p>
</div>



CSS 선택자의 종류와 예시
  • 1.일반selector (최소한 이건 기억 하자)
  • 2.복합selector
  • 3.가상클래스selector
  • 4.동적selector

참고사항

  • IE6에서는 다중클래스를 지원 하지 못하고 가장 마지막 클래스만 인식한다.
    ex) <p class="main-color info-size"> 이럴경우 마지막 info-size 만 인식한다.
selector표시방법범위
공용 selector
모든 태그를 지정
타입 selectorA태그 A를 지정
클래스 selector.A클래스가 A인 태그를 지정
ID selector#A아이이닥 A인 태그를 지정


* {
    margine: 0;
    padding: 0;
} 
// 이와 같이 지정할 경우 페이지 내의 모든 <h1>...<h5> <p>,<form> 등의
// 브라우져 기본 마진과 패딩을 갖고 있는 모든 엘리먼트 의 여백이 없어 진다.



div.search * {
 vertical-align: middle
}
//div.search안의 모든 엘리먼트 의 여백이 없어진다.


  • 1.일반selector (최소한 이건 기억 하자)
  • 2.복합selector
  • 3.가상클래스selector
  • 4.동적selector
selector표시방법범위
하위 selectorA B태그 A로 감사져 있는 B를 지정
인접 selectorA > B태그 A로 감사져 있는 태그 B중 한단계 밑에 것을 지정
자식 selectorA + B태그 A와 B가 연속적으로 나와 있는것을 지정
  • 1.일반selector (최소한 이건 기억 하자)
  • 2.복합selector
  • 3.가상클래스selector
  • 4.동적selector
selector표시방법범위
first-child selectorA:first-child태그 A로 감사져 있는 가장 처음 태그를 지정
언어 selectorA:lang(B)태그A중 언어가 B로 설정되어 있는 것을 지정
링크 selectorA:link태그 A중 링크가 걸려있으면 지정
A:visited태그 A중 링크가 결렸고 사용자가 이미 클릭한 태그를 지정
동적 selectorA:active태그 A중 사용자가 마우스 를 누르고 있는 태그를 지정
A:hover태그 A중 사용자가 마우스 포인터 위에 올려 놓은 태그를 지정
A:focus태그 A중 사용자가 키보드 입력을 받는 태그를 지정


input:hover,
input:focus {
     bacjground: #ffe;
}


참고사항

  • IE6에서는 a 엘리먼트 만 구현되어 있고, focus는 구현되어 있지 않다.


  • 1.일반selector (최소한 이건 기억 하자)
  • 2.복합selector
  • 3.가상클래스selector
  • 4.동적selector
selector표시방법범위
first-line selectorA:first-line태그 A 문단중 첫번째 줄을 지정
first-letter selectorA:first-letter태그 A의 문단중 첫번째 글자 지정
:before selectorA:before태그 A의 문단 앞을 지정
:after selectorA:after태그 A의 문단 뒤를 지정


tr:hover td {
 background: #eee
}
// 이렇게 하면 마우스가 올라갔을때 배경색이 바뀐다.



p:first-letter {
 float: left;
 font-weight: bold;
 font-size: 3.5em;
}
// 이렇게 하면 p태그에 속한 첫번째 글자가 크게 나온다.
// 원한는 글자르 span 태그 없이 CSS 만으로 강조 할수 있다.


2.CSS 레이아웃 기초

=> 레이아웃을 만들어 가는 과정을 살펴보자

  • 1. 페이지를 제작하기 위해 먼저 markup(저자가 원고의 내용의 의미를 표기하는 행위)을 작성 한다.
    • 1.1 markup 단계에서는 디자인을 고려하지 않는다.
    • 1.2 markup 단계에서는 CSS를 고려하지 않는다.
    • 1.3 오직 페이지 구성요소에 따라 그 그룹과 의미에 맞는 태그와 id clss를 이용하여 markup을 구성 한다.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=euc-kr">
<!-- table을 이용할경우 markup영역이 좌측에 위치할건지 우측에 위치할 것인지 이미 결정되어지게 되지만 -->
<!-- CSS를 이용한 레이아웃 에서는 markup에 이러한 디자인 정보가 없기에 단순하게 위에서 아래로 나열된다. -->
<title>default css Layout</title>
</head>
<body>
<div id="head">Site Top Area</div>
<hr>
<div id="sub">Site left Area</div>
<hr>
<div id="body">Site Main Content Area</div>
<hr>
<div id="foot">Site Bottom Area</div>
</body>
</html>


  • CSS를 이용하여 디자인을 적용한다.


<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
<!-- 화면 가장자리 여백을 없애기 위한 위와 같은 방법은 사양 되야 한다. 다음 과 같이 처리 하라. -->
body {
 margin:0;
 padding:0;
}
<!-- 다음으로 hr 디자인이 화면에서 없어져야 하기때문에 다음과 같이 처리 하라 -->
hr {
 display:none;
}
<!-- Site Top Area 와 같은 경우는 고정된 높이를 가지는 경우가 대부분 이므로 다음과 같이 높이와 배경색만 지정한다 -->
#head {
 height: 170px
 background: #eee;
}
<!-- Site Left Area 는 사이트 좌측의 네비게이션등이 들어가고 고정적이며 컨텐츠 좌측에 항상들어 가므로 absolute position을 지정한다.-->
#sub {
 position: absolute;
 top: 170px
 left: 0;
 width: 160px;
}
<!-- 여기까지 적용할 경우 absolute position의 경우 화면에서 위치를 차지 하지 않기 ?문에 영역간에 겹침이 발생 하므로 다음을 적용한다.-->
#body {
 padding-left: 170px;
 width: 700px;
 background: url("http://www.ysvol.or.kr/programs/user/images/board/board_tb_vline.gif") repeat-y 170px 0;
 min-height: 400px;
}
<!-- 페이지 하단에 높이와 background 색상을 적용해 준다 -->
#foot {
 height: 30px;
 background: #eee;
}



추가사항

  • 웹사이트 컨텐츠의 절반은 리스트라고 할수 있으므로 리스트에 대한 CSS표현도 알아보자
    기본적으로 3가지 목록이다
    • ul(undered list) : 순서가 없는 리스트
    • ol(ordered list) : 순서가 있는리스트
    • dl(definition list) : term(<dt>), definition(<dd>) 쌍으로 이루어진 리스트


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=euc-kr">
<title>default css Layout</title>
<style type="text/css" >
ul {
	margin: 0;
	padding: 0;
	list-style: none;	
}
li.li2 {
	background: url("http://www.ysvol.or.kr/programs/user/images/board/board_tb_vline.gif") repeat 0 0.25em;
	padding-left: 15px
}
</style>
</head>
<body>
<h2>스타일을 적용하지 않은 경우</h1>
<ul>
	<li>list item1</li>
	<li>list item2</li>
	<li>list item3</li>	
</ul>
<h2>스타일을 적용한 경우</h1>
<ul>
	<li class="li2">list item1</li>
	<li class="li2">list item2</li>
	<li class="li2">list item3</li>	
</ul>

</body>
</html>


3.실전예제를 통한 CSS레이아웃.

=> 이건 각자 책을 보고 테스트 하세요

문서에 대하여

  • 문서참고 : 이 문서는 한국소프트웨어진흥원에서 만든 실전 웹 표준 가이드를 참고하여 작성하였습니다.
  • 최초작성자 : 허용운
  • 최초작성일 : 2007년 9월 8일
  • 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.